package org.monkey4j;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.Collection;

import org.monkey4j.suppliers.EmptySupplier;

import com.google.common.base.Supplier;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * Class for annotating beans which should be pre-initialized the monkey way.
 * 
 * @author hillger.t
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface Monkey {
	
	/**
	 * 
	 * @return
	 */
	MonkeyType type() default MonkeyType.PROPERTY_BASED;
	
	/**
	 * Name of a beans property to use for doing monkey testing.
	 */
	String property() default "";
	
	/**
	 * 
	 * @return
	 */
	boolean includeNulls() default false;

	/**
	 * Returns a {@link Supplier} providing the test data of a specific type.
	 */
	Class<? extends Supplier<? extends Collection<?>>> supplier() default EmptySupplier.class;
	
	/**
	 * 
	 * @return
	 */
	ExecutionType execution() default ExecutionType.NORMAL;
}
